簡體   English   中英

在Excel VBA中使用變量通過其編號聲明工作表

[英]Using a variable to declare a worksheet by its number in Excel VBA

晚上好。 我迫切需要一些簡短的VBA代碼幫助。

Public TFOCUS As Integer ' Creates TFOCUS, which is the worksheet in focus
Public RFOCUS As Integer ' Creates RFOCUS, which is the row in focus
Public CFOCUS As String  ' Creates CFOCUS, which is the column in focus
Public RECORD As Integer ' Creates RECORD, wich is the row that is having the record written to

FILEPATH.Worksheets(TFOCUS).Range(Cells(RFOCUS, B)).Value = Worksheets(3).Range(Cells(RECORD, A)).Value 'copies focus EmpID to destination
FILEPATH.Worksheets(TFOCUS).Range(Cells(4, CFOCUS)).Value = Worksheets(3).Range(Cells(RECORD, B)).Value 'copies focus Course to destination
FILEPATH.Worksheets(TFOCUS).Range(Cells(RFOCUS, CFOCUS)).Value = Worksheets(3).Range(Cells(RECORD, C)).Value 'copies focus Date to destination
CFOCUS = CFOCUS + 1 'moves focus to next column
RECORD = RECORD + 1 'creates next record

FILEPATH設置為外部Excel工作簿的路徑。 在這種情況下,TFOCUS設置為1,RFOCUS設置為5,CFOCUS設置為“ Q”,RECORD設置為1。

目的是將記錄從外部excel文檔復制到活動電子表格中,並通過移動單元格內容來重新格式化它們。 這將用於移動多個源,並且必須處理每個源文檔中的每個選項卡(都可以命名為不同的名稱)。

我遇到的問題是,我在以下行上收到運行時錯誤13:編譯時鍵入不匹配錯誤:

FILEPATH.Worksheets(TFOCUS).Range(Cells(RFOCUS, B)).Value = Worksheets(3).Range(Cells(RECORD, A)).Value 'copies focus EmpID to destination

我假設這與將TFOCUS用作整數或將FILEPATH用作文件路徑有關。 誰能建議:

  • 到底不匹配是什么
  • 如果是由於使用工作表(TFOCUS),我有什么辦法可以使用變量按Tab鍵順序按工作表編號引用工作表?
  • 還有其他建議嗎?

在此先感謝您的幫助。

您沒有向我們顯示變量的分配位置/位置,而是...

 Public RFOCUS As Integer ' Creates RFOCUS, which is the row in focus Public CFOCUS As String ' Creates CFOCUS, which is the column in focus 

嘗試將CFOCUS聲明為Integer 或者更好,作為Long ,以便您的代碼可以在行32767之后使用( Integer類型是16位且帶符號,因此32768是一個溢出值)。

另外,如果FILEPATHString ,那么您的代碼將無法工作:

FILEPATH設置為外部Excel工作簿的路徑。

 FILEPATH.Worksheets(TFOCUS) 

它應該是一個Workbook對象。但是您使用的標識符非常混亂。

Dim wb As Workbook
Set wb = Workbooks.Open(FILEPATH)

wb.Worksheets(TFOCUS).Range(Cells(RFOCUS, B)).Value = Worksheets(3).Range(Cells(RECORD, A)).Value 'copies focus EmpID to destination
wb.Worksheets(TFOCUS).Range(Cells(4, CFOCUS)).Value = Worksheets(3).Range(Cells(RECORD, B)).Value 'copies focus Course to destination
wb.Worksheets(TFOCUS).Range(Cells(RFOCUS, CFOCUS)).Value = Worksheets(3).Range(Cells(RECORD, C)).Value 'copies focus Date to destination
CFOCUS = CFOCUS + 1 'moves focus to next column
RECORD = RECORD + 1 'creates next record

'save [wb] workbook? Close it?
Set wb = Nothing

我是否也可以建議將YELLCASE用作常量,對本地人使用camelCase並對其他所有內容使用PascalCase

如果RFOCUS設置為“ Q”,並且B和A是整數,則此操作:

FILEPATH.Worksheets(TFOCUS).Range(Cells(RFOCUS, B)).Value = Worksheets(3).Range(Cells(RECORD, A)).Value

應該:

FILEPATH.Worksheets(TFOCUS).Range(RFOCUS & B).Value = Worksheets(3).Cells(Record, A).Value

這是所有3行:

FILEPATH.Worksheets(TFOCUS).Range(RFOCUS & B).Value = Worksheets(3).Cells(Record, A).Value
FILEPATH.Worksheets(TFOCUS).Cells(4, CFOCUS).Value = Worksheets(3).Cells(Record, B).Value
FILEPATH.Worksheets(TFOCUS).Range(RFOCUS & CFOCUS).Value = Worksheets(3).Cells(Record, C).Value

暫無
暫無

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

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