2015-01-07 90 views
0

我需要存儲選定的單元格並在將來使用它們的值。我將選擇存儲到範圍對象的變量,然後我修改選定的單元格。我正在檢查其他子程序中的結果,如果條件爲假,那麼我需要恢復與之前相同範圍的值。複製選擇並稍後粘貼它

Public hi, hj As Integer 

Public ActSheet As Worksheet 

Public SelRange As Range 

Sub per_num() 


Dim cell As Object 

Set ActSheet = ActiveSheet 
Set SelRange = Selection 
SelRange.Copy 



For Each cell In Selection 

    'perform some action 

Next cell 

hi = Selection.Row 
hj = Selection.Column 


End Sub 

    Sub num_per() 
    if something is false 
    Cells(hi, hj).Select 
    SelRange.PasteSpecial xlPasteFormats 
    End Sub 

回答

0

您的範圍創建對該組單元格的引用。你所問的要求你將這些值寫入內存。這應該做你所要求的:

Option Explicit 

Public selArray As Variant ' Add this global variable 
Public SelRange As Range 

Sub per_num() 

Dim cell As Range 
Set SelRange = Selection 
selArray = SelRange ' Returns the values from your range into a variant 

For Each cell In Selection 
    'perform some action 
Next cell 

End Sub 

Sub num_per() 
    ' if something is false 
    SelRange = selArray  ' Writes the values from the variant back into the range 
    Set SelRange = Nothing 
    If IsArray(selArray) Then Erase selArray 
End Sub 

在per_num子,它創建的參考你的選擇和值寫入selArray變量。

在num_per子文件中,它將值寫回到您的範圍所指的單元格中。

*值得注意的是,如果您只選擇了一個單元格,selArray實際上不會是一個數組,但命名僅僅是我最初嘗試的宿醉。

+0

感謝您的回覆......您能否清楚一點概念,因爲VBA是面向對象的,通過定義相同類型的對象(var1)並使其等於相同類型的變量表示對象類型( var2)..複製定義變量(var1)中的所有值。那麼爲什麼這不在這裏發生。或vba不完全是面向對象的。 – hunch

+0

據我所知,我可以糾正這一點,這是因爲Range對象的默認屬性是.Value,所以當你使Variant等於Range時,它是不使它成爲相同的對象類型(對.Range的引用等同於.Range.Value - 對於單個單元格,如果選擇多個單元格,則返回值,則返回該值)。 – Dave