2015-04-16 39 views
-1

我是一名建築師,並在其中有許多房間的工作表。我製作了一個基本的搜索引擎,您可以在其中編寫房間的特定代碼,其餘規範中有關該特定房間的其他內容將按順序顯示。我要添加的是在搜索框上加號和減號可以尋找下一個和以前的代碼。你能幫我麼? 現在已經感謝您的回覆:)Excel - 需要學習如何製作它?

注意:我沒有Macro的知識。如果你要解釋,請記住,你是向新手解釋它,所以假設我甚至不知道如何開始啓動它:)

+0

請您能不能告訴你有什麼這麼遠嗎?截圖會很有幫助。 –

回答

2

首先,寫一個宏,你必須啓用「開發」功能在你的excel版本上。

2007: https://support.office.com/en-ca/article/Show-the-Developer-tab-or-run-in-developer-mode-1b4a8529-3094-432a-9a7f-53935089e5ed

二千零十三分之二千零十:https://msdn.microsoft.com/en-us/library/bb608625.aspx

,你現在有一個額外的窗格中, 「開發」 中,你會發現像重要的東西: 「Visual Basic中」, 「宏」,

插入按鈕允許您在Excel表格中選擇一個按鈕或類似按鈕。這樣做的時候,當按下按鈕時,系統會提示您分配一個宏來運行。

即使該宏還不存在,您可以通過在該對話框中爲其編寫一個奇特的名稱並單擊「新建」來創建它。 這將在新窗口中打開代碼編輯器。


點擊「Visual Basic」也會打開代碼編輯器。 (如果您不小心關閉它)

在代碼編輯器窗口的左側,您會看到一個帶有表單屬性的「樹」。要正確的應該是一個文本,如:

Sub theNameYouChoseForTheMacro() 

End Sub 

如果沒有,那麼你將要雙擊「的ThisWorkbook」真正開始編輯代碼。

單擊文本,在「()」和「結束」之間的行中。

這就是我們要添加按鈕代碼的地方。

現在取決於如何製作搜索引擎,代碼需要相應地編寫。以下假定它是工作簿中的單元格。

首先,我們通過讀取所述搜索單元中的現有值,並將其存儲在與該尺寸整型變量開始時(假設您的代碼的整數) 通知該小區是由它的位置在所選的片

Dim myVariable 
myVariable = Worksheets("Sheet1").Range("A1").Value 

然後我們要加上或減去一個值,在這個例子中,我們添加一個值:

myVariable = myVariable + 1 

,並把它寫回細胞,重新做了Excel中實現搜索..

Worksheets("Sheet1").Range("A1").Value = myVariable 

的情況下,你用實現一個插件,或VBA代碼搜索從什麼地方,你將需要激活以某種方式搜索。

完整的例子的代碼:

Sub theNameYouChoseForTheMacro() 
    Dim myVariable As Integer 
    myVariable = Worksheets("Sheet1").Range("A1").Value 
    myVariable = myVariable + 1 
    Worksheets("Sheet1").Range("A2").Value = myVariable 
End Sub 

交評論編輯:

據我爲了通過1個MYVARIABLE + 1被定義爲提高值觀察該特定單元格的下一個(雙擊之後)值。

Ehmnnn,不知道我的正確解讀這些文字,但.. 是的,我們只需添加一個變量的值,然後把它寫回的信元進行時。這不是當你雙擊時,它是當你離開按鈕時。或者運行從編輯宏(點擊播放圖標,然後選擇theNameYouChoseForTheMacro

但我的房間代碼是由文字和數字的組合(例如:B2-021意味着樓地下室2 - 房間21) 。而這些代碼並不總是爲了以穩定的方式

確定..這改變的事情..

如果你想獲得下一個代碼,我們需要的代碼提取的所有描述可能的代碼代碼爲 代碼如何相關te到Excel表格中的房間數據?

在未來的版本我假設你有一個房間每行,在不同的工作表「Sheet2的」,而且房間代碼可以在coloumn一個在Sheet2中

首先可以看出,我們需要知道的是,搜索代碼是一個字符串,而不是一個整數:

Dim myVariable As String 
    myVariable = Worksheets("Sheet1").Range("A1").Value 

,我們要確定它坐落在Sheet2中,爲了這個,我使用的功能,在從http://www.rondebruin.nl/win/s9/win006.htm

Function Find_First(FindString As String, Optional Col As Boolean) 
    Dim Rng As Range 
    If Trim(FindString) <> "" Then 
     With Sheets("Sheet2").Range("A:A") 
      Set Rng = .Find(What:=FindString, _ 
          After:=.Cells(.Cells.Count), _ 
          LookIn:=xlValues, _ 
          LookAt:=xlWhole, _ 
          SearchOrder:=xlByRows, _ 
          SearchDirection:=xlNext, _ 
          MatchCase:=False) 
      If Not Rng Is Nothing Then 
       If Col Then 
        Find_First = Rng.Column 
       Else 
        Find_First = Rng.Row 
       End If 
      Else 
       MsgBox "Nothing found" 
       Find_First = Nothing 
      End If 
     End With 
    End If 
End Function 
被盜宏找到了子修改

這爲我提供了Sheet2中找到的字符串的顏色和行號。 所以我們採取的行數,加上或減去一個 這一次,我們從細胞在列和行的索引值更改:

Sub Button1_Click() 
    Dim myVariable As String 
    Dim Coloumn As Integer 
    Dim Row As Integer 

    myVariable = Worksheets("Sheet1").Range("A1").Value 

    Coloumn = Find_First(myVariable, True) 
    Row = Find_First(myVariable) + 1 

    Worksheets("Sheet1").Range("A1").Value = Worksheets("Sheet2").Cells(Row, Coloumn) 

End Sub 
+0

首先感謝您對這個問題的回覆和關於亨裏克問題的詳細解釋:)我安靜地聽取了您的宏文本中的內容,並將其調整爲我的內容。據我所知,爲了將值提高1,myvariable + 1被定義爲特定單元格的下一個(雙擊之後)值。但我的房間代碼由文本和數字組合組成(例如:B2-021代表地下室2 - 房間21)。並且這些代碼並不總是以穩定的方式上升。 –

+0

在這種情況下,我應該將myvariable定義爲特定的單元格,並且在下一輪中,我應該聲明,如果我的變量是A1,它應該將它視爲A2,以便它總是檢查下一個。而對於減號宏我應該說相反 –

+0

-1 反對 接受 WOW :)當然它的一種心靈在這個階段爲我吹,但是我會嘗試理解內部的邏輯。只有可能不安靜適合我的工作表的東西可以是列和行索引,但我只是需要它來從某個顏色獲取信息。如果它與你共享,我可以分享.xls,以便你可以擁有更好的外觀。我會記下它來描述所需的過程。雖然我是新的堆棧溢出,可以與其他用戶共享.xls嗎? 再次感謝你亨利克,努力教我一些宏,並解決我的問題:) –