我想從Word表格中選取單元格。我需要收集選定的表格單元格以創建自定義書籤對象,其中包含用戶選擇單元格範圍的信息。當用戶選擇單元格的矩形區域時,一切正常。這是我應得選擇表格單元格在我的Word加載項:Word Interop:當選擇區域不是矩形時,如何從Word表格中獲取有效的選定單元格集合?
Globals.ThisAddIn.Application.Selection.Range.Application.ActiveWindow.Selection.Cells
如果用戶選擇未矩形或選擇一個以上的區域(按住CTRL向下),則該屬性返回細胞無效集合區。我創建了一個簡單的VBA代碼使用兩個屬性測試表中選擇什麼樣細胞:
Globals.ThisAddIn.Application.Selection.Range.Application.ActiveWindow.Selection.Cells
Globals.ThisAddIn.Application.Selection.Range.Cells
這兩項性能在用戶選擇非矩形的表格單元格區域返回不同的和無效的選定單元格集合。這是我使用的是測試用的VBA代碼,細胞在Word表格範圍內進行選擇時,有:
Sub test()
Dim listaKomorek1 As New Collection
Dim listaKomorek2 As New Collection
Dim indekser1 As Integer
Dim indekser2 As Integer
Dim tekst1 As String
Dim tekst2 As String
Dim tabela As Table
Set tabela = Selection.Range.Tables(1)
indekser1 = 1
indekser2 = 1
liczbaKomorek1 = Selection.Range.Cells.count()
liczbaKomorek2 = Selection.Range.Application.ActiveWindow.Selection.Cells.count()
tekst1 = "Lista komorek 1 (Selection.Range.Cells): " & vbCrLf & vbCrLf & vbCrLf
tekst2 = "Lista komorek 2 (ActiveWindow.Selection.Cells): " & vbCrLf & vbCrLf & vbCrLf
For Each komorka In Selection.Range.Cells
tekst1 = tekst1 & "#Cell: " & CStr(indekser1) & " Value: " & CStr(komorka.Range.Text) & " Column: " & CStr(komorka.ColumnIndex) & " Row: " & CStr(komorka.RowIndex) & vbCrLf
indekser1 = indekser1 + 1
Next komorka
For Each komorka In Selection.Range.Application.ActiveWindow.Selection.Cells
tekst2 = tekst2 & "#Cell: " & CStr(indekser2) & " Value: " & CStr(komorka.Range.Text) & " Column: " & CStr(komorka.ColumnIndex) & " Row: " & CStr(komorka.RowIndex) & vbCrLf
indekser2 = indekser2 + 1
Next komorka
tekst1 = tekst1 & vbCrLf & "Cells count: " & CStr(liczbaKomorek1)
tekst2 = tekst2 & vbCrLf & "Cells count: " & CStr(liczbaKomorek2)
MsgBox tekst1
MsgBox tekst2
End Sub
我的問題的,當用戶在Word表格中選擇區域我如何才能夠獲得有效的選擇細胞採集未矩形?
據我所知,一個選擇是VBA「看到」的多個不連續的部分只有一部分是最後一個選擇。較早的選擇無法通過對象模型獲得。並且沒有有用的「選定」屬性。 AFAIK如果你做了一個連續的選擇,你可以成功迭代Selection.Cells,但我不確定這是否是你發現的。還有其他一些潛在的困難:一個選擇包含兩個表格中的單元格以及兩者之間的空格(Selection.Cells.Count在這種情況下爲零)以及涉及嵌套表格的選擇。 – 2014-03-26 18:04:48
相關:http://support.microsoft.com/kb/288424 –
有趣的閱讀,謝謝。關於此:當用戶選擇多個不連續範圍時,Selection對象的以下方法和屬性將應用於用戶選擇中的所有子範圍:Selection.Font.Size。這是不是意味着我可以改變,例如,字體大小爲多個不連續範圍內的所有單元格,然後迭代通過表來找到這些單元格?這會工作嗎? – shadovraven