簡體   English   中英

Excel VBA:基於另一個單元格的格式,獲取方法錯誤

[英]Excel VBA: Formatting Based on The Format of Another Cell, Getting Method Error

我正在處理一個電子表格,可以分解給定部門中的任務。 然后,使用數據驗證下拉菜單將每個任務分配給該部門的人員,該下拉菜單會動態地從列出部門中每個員工/角色的表中獲取值。 這些表與任務細分位於不同的表上。

每個人都需要自己的背景色,當從任務表的下拉列表中選擇他們的名字時,這些背景色會自動填充。 我希望做的是編寫一個宏,在表中查找該人的名字(請注意,我使用的是命名范圍),然后將所選單元格的格式與表中的行進行匹配。 我是VBA的超級初學者,已經達到了極限。 幾個答案與我想做的事情很接近,但是在針對我的特定用例進行調整方面,我陷入了困境。

我從該線程中獲取了代碼,這實質上是我想要實現的結果,除了它們的密鑰在同一張紙上並且我的代碼不能是: https : //superuser.com/questions/472918/excel-conditionally-format -a-細胞使用最格式的-另一個內容匹配

到目前為止,我已經對此進行了編譯:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

If VarType(Target) > vbArray Then Exit Sub
' if multiple cells are changed at once, then exit

Dim kr1 As Range
Dim kr2 As Range
Dim KeyRange As Range
Dim TargetRange As Range
Dim lCell As Object
Dim kCell As Object

Set kr1 = Application.Range("ESFormattingRange")
Set kr2 = Application.Range("CSFormattingRange")
Set KeyRange = Application.Union(Range("kr1"), Range("kr2"))
' formatting key is here
Set TargetRange = ThisWorkbook.Worksheet("Sheet3").Range("A:X")
' changing cells in this area

For Each kCell In KeyRange.Cells
 If kCell.Value <> "" Then
  For Each lCell In TargetRange.Cells
    If lCell.Value = kCell.Value Then
    ' only change cells that match the edited cell
        lCell.Font.Color = kCell.Font.Color
        lCell.Interior.Color = kCell.Interior.Color
        ' copy whatever you feel needs to be copied
    End If
  Next
  End If
Next

End Sub

運行此命令時,出現以下方法錯誤,但是在嘗試調試時沒有突出顯示任何行:

編譯錯誤:找不到方法或數據成員

我在想,也許我構造范圍變量的方式出了問題,但是我已經搜尋了所有我能想到的東西,我茫然了。

任何幫助是極大的贊賞!

VBE應該在ThisWorkbook.Worksheet("Sheet3").Range("A:X")突出顯示單詞Worksheet

“未找到方法或數據成員”表示Worksheet不是ThisWorkbook的成員。

您可以通過按CTRL + SPACE將成員名稱自動填寫為Worksheets來解決此問題。

或者,您可以重新輸入. ThisWorkbook之后取消引用操作員,然后在顯示名稱列表下拉列表時按TAB鍵,突出顯示Worksheets成員-這還將自動將成員名填寫為Worksheets

經驗法則(如果輸入) . 解引用運算符,然后鍵入名稱列表中未包含的內容,則可能會出現此編譯錯誤。

當您針對VariantObject變量進行錯字輸入時,代碼會很高興地進行編譯,但是在運行時會拋出錯誤438-如下所示:

ThisWorkbook.Worksheets("Sheet3").Ragne("A:X") ' <~ typo compiles. Option Explicit can't save you.

原因是Worksheets返回一個Object引用,因此鏈接到該Object任何成員調用都在運行時解決。 一種更安全的編碼方式是聲明一個本地Worksheet變量來保存該對象,然后使用該對象:

Dim sourceSheet As Worksheet
Set sourceSheet = ThisWorkbook.Worksheets("Sheet3")

sourceSheet.Rnage("A:X") ' <~ typo throws at compile-time now!

但是,如果工作表對象在編譯時存在於ThisWorkbook中,則最好改用其代號 Project ExplorerCTRL + R)中找到Sheet3 ,然后找到其(Name)屬性-將其更改為例如SourceSheet 然后您可以執行以下操作:

SourceSheet.Range("A:X") ' <~ a typo wouldn't compile here.

...無需顯式聲明SourceSheet

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM