第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Excel VBA變量何時(shí)應(yīng)被殺死或設(shè)置為Nothing?

Excel VBA變量何時(shí)應(yīng)被殺死或設(shè)置為Nothing?

不負(fù)相思意 2019-12-04 09:58:53
在過(guò)去的兩年中,我一直在自學(xué)Excel VBA,我認(rèn)為有時(shí)在代碼段的末尾處理變量是適當(dāng)?shù)摹@?,我看過(guò)這是在Ron de Bruin的將Excel轉(zhuǎn)換為HTML的代碼中改編而成的:Function SaveContentToHTML (Rng as Range)        Dim FileForHTMLStorage As Object        Dim TextStreamOfHTML As Object        Dim TemporaryFileLocation As String        Dim TemporaryWorkbook As Workbook...        TemporaryWorkbook.Close savechanges:=False        Kill TemporaryFileLocation        Set TextStreamOfHTML = Nothing        Set FileForHTMLStorage = Nothing        Set TemporaryWorkbook = NothingEnd Function我已經(jīng)對(duì)此進(jìn)行了一些搜索,發(fā)現(xiàn)除如何執(zhí)行之外幾乎沒(méi)有發(fā)現(xiàn),并且在一個(gè)論壇中發(fā)表了一個(gè)聲明,無(wú)需清除任何局部變量,因?yàn)樗鼈儾辉俅嬖谟贓nd Sub。根據(jù)以上代碼,我猜測(cè)在End Function或在其他情況下我可能沒(méi)有遇到過(guò)這種情況。所以我的問(wèn)題可以歸結(jié)為:網(wǎng)絡(luò)上是否有什么地方解釋了何時(shí)以及為何進(jìn)行變量清除,而我只是沒(méi)有找到它?如果沒(méi)有人在這里,請(qǐng)解釋一下...什么時(shí)候需要清除Excel VBA的變量,何時(shí)不需要?更具體地說(shuō),...是否有特定的變量用法(公共變量或函數(shù)定義的變量?)在內(nèi)存中的保存時(shí)間比subs更長(zhǎng),因此如果我不自己清理,可能會(huì)造成麻煩?
查看完整描述

3 回答

?
瀟瀟雨雨

TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個(gè)贊

VB6 / VBA使用確定性方法存儲(chǔ)對(duì)象。每個(gè)對(duì)象存儲(chǔ)對(duì)其自身的引用數(shù)量。當(dāng)數(shù)字達(dá)到零時(shí),對(duì)象將被銷(xiāo)毀。

當(dāng)對(duì)象變量Nothing超出范圍時(shí),保證將其清除(設(shè)置為),這將減少其各自對(duì)象中的引用計(jì)數(shù)器。無(wú)需手動(dòng)操作。

當(dāng)您需要顯式清理時(shí),只有兩種情況:

  1. 當(dāng)您要在對(duì)象的變量超出范圍之前對(duì)其進(jìn)行銷(xiāo)毀時(shí)(例如,您的過(guò)程將花費(fèi)很長(zhǎng)時(shí)間執(zhí)行,并且該對(duì)象擁有資源,因此您希望盡快銷(xiāo)毀該對(duì)象以釋放對(duì)象)資源)。

  2. 在兩個(gè)或多個(gè)對(duì)象之間具有循環(huán)引用時(shí)。

    如果objectA存儲(chǔ)objectBobjectB引用了objectA這兩個(gè)對(duì)象,則除非通過(guò)顯式設(shè)置objectA.ReferenceToB = Nothing或制動(dòng)鏈,否則這兩個(gè)對(duì)象將永遠(yuǎn)不會(huì)被破壞objectB.ReferenceToA = Nothing

您顯示的代碼段是錯(cuò)誤的。無(wú)需手動(dòng)清理。進(jìn)行手動(dòng)清理甚至有害,因?yàn)檫@會(huì)使您對(duì)更正確的代碼有錯(cuò)誤的認(rèn)識(shí)。

如果在類(lèi)級(jí)別具有變量,則在銷(xiāo)毀類(lèi)實(shí)例時(shí)將清除/銷(xiāo)毀該變量。您可以根據(jù)需要提前銷(xiāo)毀它(請(qǐng)參閱第項(xiàng)1.)。

如果在模塊級(jí)別具有變量,則在程序退出時(shí)(或在VBA情況下,當(dāng)VBA項(xiàng)目重置時(shí))將清除/銷(xiāo)毀該變量。您可以根據(jù)需要提前銷(xiāo)毀它(請(qǐng)參閱第項(xiàng)1.)。

變量的訪問(wèn)級(jí)別(公共或私有)不會(huì)影響其生存時(shí)間。


查看完整回答
反對(duì) 回復(fù) 2019-12-04
?
繁星點(diǎn)點(diǎn)滴滴

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(gè)贊

VBA使用通過(guò)引用計(jì)數(shù)實(shí)現(xiàn)的垃圾收集器。


一個(gè)給定對(duì)象可以有多個(gè)引用(例如,Dim aw = ActiveWorkbook創(chuàng)建對(duì)Active Workbook的新引用),因此,垃圾收集器僅在明確沒(méi)有其他引用時(shí)才清除該對(duì)象。設(shè)置為Nothing是減少引用計(jì)數(shù)的一種明確方法。退出范圍時(shí),計(jì)數(shù)將隱式遞減。


嚴(yán)格來(lái)說(shuō),在現(xiàn)代Excel版本(2010+)中,沒(méi)有必要將“無(wú)”設(shè)置為“空”,但是較早版本的Excel存在一些問(wèn)題(為此必須明確設(shè)置解決方法)


查看完整回答
反對(duì) 回復(fù) 2019-12-04
?
慕雪6442864

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊

我至少有一種情況不會(huì)自動(dòng)清除數(shù)據(jù),最終將導(dǎo)致“內(nèi)存不足”錯(cuò)誤。在用戶(hù)窗體中,我有:


Public mainPicture As StdPicture

...

mainPicture = LoadPicture(PAGE_FILE)

銷(xiāo)毀UserForm后(Unload Me),mainPicture未取消分配為中加載的數(shù)據(jù)分配的內(nèi)存。我必須添加一個(gè)明確的


mainPicture = Nothing

在終止事件中。


查看完整回答
反對(duì) 回復(fù) 2019-12-04
  • 3 回答
  • 0 關(guān)注
  • 1783 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)