2017-05-03 60 views
-1

我正在使用VC++ 6.0中的Excel自動化開發MFC程序。如何在MFC Excel中控制工作表的滾動條?

我想控制滾動條,這樣我可以在工作表的左上方放置一些單元格。

我發現在VBA中有一個Application :: Goto()方法,它可以滾動工作表並將特定的單元格放在工作表的左上角。 幸好在庫(Excel.h)中,我找到了和下面的代碼一樣的方法。

新增:

void _Application::Goto(const VARIANT& Reference, const VARIANT& Scroll) 
{ 
    static BYTE parms[] = 
     VTS_VARIANT VTS_VARIANT; 
    InvokeHelper(0x1db, DISPATCH_METHOD, VT_EMPTY, NULL, parms, 
    &Reference, &Scroll); 
} 

但我不知道如何使用此方法。 我的意思是我不知道參數應該是什麼。儘管我已經看過MSDN文檔,但它只涉及VBA,而不是MFC。 The document說,它可以是範圍的對象,但我真的不知道。

m_App.Goto(COleVariant("A10"), gotoScrollTrue); 

因爲我有使用「範圍對象」到VARIANT &不知道,所以我只是想這樣。但是,發生無效的參考錯誤。

我知道使用MFC很難找到關於Excel自動化的信息,但我別無選擇。

我希望會有人能救我。

P.S.我無法切換到.NET框架等其他工具。現在該程序正在使用硬件機器,並且它還包含許多其他功能,不僅僅是移動滾動。現在我正在修改我的未知老人編寫的代碼。我的程序有點像this。但MS只提供這些如何啓動像關於VC++ MFC Excel自動化的文檔。我不知道,但它感覺它是一個古老的遺物。當我用這個谷歌時,我想要的結果很少,而且幾乎是在10年前寫的。無論如何,我知道我很無聊,但希望有人知道如何用VC++開發Excel自動化。

+0

你或許應該開始閱讀這裏:https://msdn.microsoft.com/en-us/library /d2tx7z6d(v=vs.110).aspx –

+0

1)首先驗證您可以在Excel中編寫具有所需功能的VBA宏。 2)然後你使用oleview.exe並瀏覽到Excel的類型庫(在excel.exe中)並找出你需要的對象。 3)您可以#導入庫,或跳過它並使用CComDispatchDriver撥打電話。在我安裝在_Application功能的簽名是'HRESULT後藤( [中,可選] VARIANT參考, [中,可選] VARIANT滾動, [中,LCID]長LCID);' –

+0

@RichHolton謝謝你你的回覆,但不幸的是我認爲我應該堅持這一點。 –

回答

0

老實說,不需要創建一個VBA宏來首先測試你的想法。在Excel中,轉到視圖選項卡,然後在最右側打開宏並創建一個宏。在找出VBA中的工作後,如果需要,可以翻譯成其他語言。所有Office開發應該像那樣開始。

如果你看看Application.GoTo的幫助,你會看到第一個參數必須是指定有效範圍的東西。 「A10」不是有效範圍。但是,「R10C1」應該是有效範圍,指定第10行和第1列。

像這樣的東西在C++假設你M_APP是一個包裝某種IDispatch接口的但是CComPtr:

_variant_t vResult; 
CComDispatchDriver ccdExcel(m_App); 
ccdExcel.Invoke2(L"GoTo", &_variant_t(L"R10C1"), &_variant_t(VARIANT_TRUE), &vResult); 
+0

感謝您的回答,我解決了這個問題。這真的很有幫助。另外,感謝你,現在我想我對這個Office開發有點洞察力。非常感謝。 –

+0

Stackoverflow協議是當你喜歡一個答案,你upvote它。如果答案是對您問題的回答,那麼您將其標記爲已回答。 –

+0

對不起,我忘了。 –