2016-04-11 23 views
1

我想要一個常用的單元格,其中計算總是開始,然後我想根據日期和通過多少周來翻譯範圍因爲電子表格是最後更新的。返回活動單元格的列索引,以便它可以被操縱以形成一個新的範圍

例如Active Cell列索引是4並且12周過去了。所以活動單元現在需要列16,然後我想選擇右邊的12列和所有使用的行。

$ Sub DataUpdate() 


Dim WeekCom As Double 
Dim WeekUpd As Double 
Dim DatSt As Range 
Dim DifWks As Double 


WeekCom = Int("WeekCommencing") 
WeekUpd = Int("Lastupdate") 
DifWks = WeekCom - WeekUpd 
Set DatSt = Range("DataStart") 

If WeekCom > WeekUpd + 7 Then 
With ActiveSheet 
    .Range(Cells(row(DatSt), = Column(DatSt)+ DifWks), Cells 
      (Cells.Rowindex.SpecialCells(xlCellTypeLastCell), = Column(DatSt)+ DifWks+12)) 

End With 

End If 

End Sub $ 

這是我到目前爲止我不確定是否因爲我是VBA新手而使用它。

問候

格雷格

Sub DataUpdate() 

Dim WeekCom As Long 
Dim WeekUpd As Long 
Dim DifWks As Long 
Dim DatSt As Range 
Dim newRange As Range 

**WeekCom = CInt(Range("WeekCommencing").Value)** 
**WeekUpd = CInt(Range("Lastupdate").Value)** 
DifWks = WeekCom - WeekUpd 
Set DatSt = Range("DataStart") 

If WeekCom > WeekUpd + 7 Then 
    Set newRange = Intersect(DatSt.Offset(0, DifWks).Resize(1, DifWks).EntireColumn, ActiveSheet.UsedRange) 
End If 

    MsgBox newRange.Address 

End Sub 

此代碼似乎仍然提供 「溢出」 的錯誤。目前唯一使用的數據是格式化日期,日期格式爲4萬。 @MacroMan_對不起,打擾你,但我希望你能幫助。我把星號放在顯示錯誤的地方。 乾杯 格雷格

回答

0

使用Intersect()Offset()Resize()嘗試 - 我認爲DatSt在這種情況下一個單元格:

Sub DataUpdate() 

Dim WeekCom As Integer 
Dim WeekUpd As Integer 
Dim DifWks As Integer 
Dim DatSt As Range 
Dim newRange As Range 

WeekCom = CInt(Range("WeekCommencing").Value) 
WeekUpd = CInt(Range("Lastupdate").Value) 
DifWks = WeekCom - WeekUpd 
Set DatSt = Range("DataStart") 

If WeekCom > WeekUpd + 7 Then 
    Set newRange = Intersect(DatSt.Offset(0, DifWks).Resize(1, DifWks).EntireColumn, ActiveSheet.UsedRange) 
End If 

    MsgBox newRange.Address 

End Sub 
+0

謝謝宏文。我也遇到了麻煩,因爲我正在使用我的代碼獲取運行時錯誤13。你能幫忙嗎?乾杯 –

+0

可能是因爲你正在使用'row(DatSt)',我認爲你想'DatSt.Row','Range()'方法中也不需要'='。儘管在這個例子中你不需要任何這些。 –

+0

我已將您的代碼複製到我的{with}部分,並且錯誤似乎出現在WeekCom =和WeekUpd =行 –

相關問題