2015-05-29 38 views
0

我想將格式化工作表中名爲BOD_Labsheet的數據存檔爲名爲Data的數據。我使用UserForms做了類似的事情,但在這裏遇到問題。如何將一個工作表中命名區域的值分配給活動工作表中的單元格?

當我運行宏,我得到的錯誤「方法‘範圍’對象的_Worksheet失敗」上線

dataWorksheet.Cells(emptyRow, 2) = bodWorksheet.Range("BOD_Lab_Date").Value 

數據的工作表被激活,當我做了複製。

我是否應該簡單地將BOD_Labsheet中的所有值複製到數組中,激活數據工作表和複製值?

下面是完整的代碼:

Sub Submit_BOD() 
' 
' Submit_BOD Macro 
' 
Dim dataWorksheet As Worksheet, bodWorksheet As Worksheet, suspendedSolidsWorksheet As Worksheet 
Dim dataSheetName As String 
Dim bodSheetName As String 
Dim suspendedSolidsName As String 

dataSheetName = "Data" 
bodSheetName = "BOD_Labsheet" 
suspendedSolidsName = "Suspended_Solids_Labsheet" 

Set dataWorksheet = ActiveWorkbook.Sheets(dataSheetName) 
Set bodWorksheet = ActiveWorkbook.Sheets(bodSheetName) 
Set suspendedSolidsWorksheet = ActiveWorkbook.Sheets(suspendedSolidsName) 

Dim myRanges() As Variant 
myRanges = Array("BOD_Collected_By", "BOD_Temp_Out", "BOD_Temp_IN", "BOD_Source", "BOD_Sample_Vol_4", _ 
       "BOD_Dilution_1", "BOD_Blank_IDO_4", "BOD_Blank_FDO_4", "BOD_Sample_Vol_7", "BOD_Dilution_2", _ 
       "BOD_Blank_IDO_7", "BOD_Blank_FDO_7", "BOD_Seed_IDO_13", "BOD_Seed_FDO_13", "BOD_Seed_IDO_14", _ 
       "BOD_Seed_FDO_14", "BOD_Influent_IDO_15", "BOD_Influent_FDO_15", "BOD_Influent_IDO_16", _ 
       "BOD_Influent_FDO_16", "BOD_Effluent_IDO_20", "BOD_Effluent_FDO_20", "BOD_Effluent_IDO_21", "BOD_Effluent_FDO_21", _ 
       "In_BOD_Concentration", "Out_BOD_Concentration") 

'Make Data Sheet active 
dataWorksheet.Activate 

Dim myDate As Date 
myDate = DateValue(bodWorksheet.Range("BOD_Lab_Date").Value) 


Dim yearAsString As String, monthAsString As String, dayAsString As String 
yearAsString = Format(myDate, "yyyy") 
monthAsString = Format(myDate, "mm") 
dayAsString = Format(myDate, "dd") 

Dim reportNumberText As String 
reportNumberText = "NP" & yearAsString & monthAsString & dayAsString 
Debug.Print "reportNumberText = "; reportNumberText 

'Determine emptyRow 
Dim emptyRow As Integer 
emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1 

'Transfer information 
'Sample Number 
dataWorksheet.Cells(emptyRow, 1).Value = reportNumberText 

'Date and Time Collected 

dataWorksheet.Cells(emptyRow, 2) = bodWorksheet.Range("BOD_Lab_Date").Value 
dataWorksheet.Cells(emptyRow, 3) = Format(bodWorksheet.Range("BOD_Collection_Date").Value, "dd-mmm-yyyy") 
dataWorksheet.Cells(emptyRow, 4) = Format(bodWorksheet.Range("BOD_Read_On_Date").Value, "dd-mmm-yyyy") 

Dim i As Integer, j As Integer 

For i = LBound(myRanges) To UBound(myRanges) 
j = i + 4 
dataWorksheet.Cells(emptyRow, j) = bodWorksheet.Range(myRanges(i)).Value 
Debug.Print "dataWorksheet.Cells(" & emptyRow & "," & j & ") " & dataWorksheet.Cells(emptyRow, j).Value 

Next i 

ActiveWorkbook.Save 

suspendedSolidsWorksheet.Activate 
Range("SS_Date").Select 

End Sub 
+0

你是如何設置的所有myRanges陣列中的範圍的名稱是什麼? – TMH8885

+0

如果您在'bodWorksheet'工作表中沒有命名範圍「BOD_Lab_Date」,我會期待這個錯誤。我會檢查之前,試圖複製的東西數組,然後重新複製。這似乎增加了不必要的複雜性。 – Sobigen

回答

0

是 「BOD_LAB_DATE」 不止一個小區?也許你的方法通常工作也行,不過我通常會通過顛倒您的訂單,並使用拷貝複製的單元格區域,就像這樣:

bodWorksheet.Range("BOD_Lab_Date").Copy dataWorksheet.Cells(emptyRow, 2) 
+0

這個技巧。您的回答也提醒我BOD_Lab_Date引用了合併區域。這似乎是我原來的代碼無法工作的原因,因爲沒有適用於僅引用單個(未合併)單元格的行之後的行。謝謝! – PhillipOReilly

+1

作爲後續工作,問題的根源在於試圖從合併單元格中複製值。更快,更乾淨的解決方案是使用單個單元格,然後使用類似於dataWorksheet.Cells(emptyRow,j)= bodWorksheet.Range(myRanges(i))的值。 – PhillipOReilly

相關問題