<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>canggih.web.id &#187; vba</title>
	<atom:link href="http://canggih.web.id/tag/vba/feed/" rel="self" type="application/rss+xml" />
	<link>http://canggih.web.id</link>
	<description></description>
	<lastBuildDate>Thu, 05 Jan 2012 12:39:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>3 Bug fatal pada Microsoft Excel 2007 (rev)</title>
		<link>http://canggih.web.id/3-bug-fatal-pada-microsoft-excel-2007/</link>
		<comments>http://canggih.web.id/3-bug-fatal-pada-microsoft-excel-2007/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 03:20:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[microsoft excel]]></category>
		<category><![CDATA[vba]]></category>

		<guid isPermaLink="false">http://canggih.web.id/?p=127</guid>
		<description><![CDATA[Sebenarnya bug yang saya temui ini terus terang masih jadi tanda tanya besar saat artikel ini ditulis, entah karena ilmu saya yang masih dangkal atau memang itu merupakan bug dari sana. Ceritanya, saya diminta untuk membuat aplikasi berbasis VBA menggunakan Microsoft Excel 2007.  Aplikasi itu digunakan sebagai input dalam sebuah perhitungan yang saya rasa cukup [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://canggih.web.id/wp-content/uploads/2010/06/ms-office.png"><img class="alignleft size-thumbnail wp-image-128" title="ms-office" src="http://canggih.web.id/wp-content/uploads/2010/06/ms-office-150x150.png" alt="" width="150" height="150" /></a>Sebenarnya bug yang saya temui ini terus terang masih jadi tanda tanya besar saat artikel ini ditulis, entah karena ilmu saya yang masih dangkal atau memang itu merupakan bug dari sana. Ceritanya, saya diminta untuk membuat aplikasi berbasis VBA menggunakan Microsoft Excel 2007.  Aplikasi itu digunakan sebagai input dalam sebuah perhitungan yang saya rasa cukup rumit. Ketika men-develop aplikasi tersebutlah, ada beberapa gangguan yang sangat mengganggu dan masih terus berusaha dipecahkan saat artikel ini ditulis.</p>
<p><span id="more-127"></span></p>
<p>Beberapa bug tersebut adalah :</p>
<ul>
<li>Ketika menggunakan file excel bertipe <em>macro enabled</em> (<strong>.xlsm</strong>), sering tiba-tiba excel menjadi crash dan harus dipaksa exit, dan saat itu terjadi tidak bisa melakukan save, sehingga segala perubahan bisa hilang. Meskipun bug ini masih dapat diakali dengan melakukan save sesering mungkin, tetapi tetap saja sangat mengganggu kenyamanan dan jika lupa save bisa berbahaya.</li>
<li>Ketika memanggil fungsi <a href="http://canggih.web.id/fitur-goal-seek-pada-ms-excel/" target="_blank"><strong>GoalSeek</strong></a> dari VBA untuk melakukan fungsi <strong>reverse IRR (membalik fungsi IRR-Internal Rate of Return)</strong>. Tiba-tiba saja muncul error pada IRR dengan keterangan <strong>divided by zero</strong>, padahal ketika dicek semua perhitungan, tidak ada yang dapat menjadi penyebab hal itu (setidaknya dari pengamatan saya). Semua input yang digunakan, selain IRR, juga menggunakan bilangan-bilangan yang masuk akal. Benar-benar sampai pusing, kok bisa begini <strong>[SOLVED-ternyata masalah terletak pada kesalahan persepsi kami. Kami kira bukan nol, tetapi excel menganggapnya nol, tetapi excel tidak konsisten dalam hal ini, kadang-kadang dianggap nol kadang-kadang tidak, nah itulah yang kemudian bisa disebut bug..hehe]</strong></li>
<li>Yang ini lebih aneh lagi. Suatu ketika, aplikasi yang saya buat saya (belum ada error nomor 2 diatas), saya backup. Kemudian saya lanjutkan pengembangan aplikasi tersebut dengan menambah sedikit fitur (hanya sedikit), dan menemui error pada nomor 2 diatas, padahal saya sama sekali tidak menyentuh modul tentang GoalSeek diatas. Kemudian saya mundur selangkah untuk menggunakan aplikasi yang saya backup tadi, dan hasilnya&#8230;&#8230;..<strong>muncul error yang sama!!!!! </strong>Padahal saat saya backup, tidak ada error tersebut, mungkinkah error tersebut mempengaruhi excel itu sendiri?? Saya belum menemukan jawabannya.</li>
</ul>
<p>Saya coba meyakinkan diri sendiri bahwa diatas bukan bug dari microsoft excel, tapi cuma karena saya yang kurang paham saja. Berprasangka baik <img src='http://canggih.web.id/wp-content/plugins/smilies-themer/plurk/smile.gif' alt=':D' class='wp-smiley' /> &#8230;&#8230;..dan sekarang masih berusaha mencari solusi untuk setidaknya mengakali hal-hal diatas bersama seorang partner di ibukota.</p>
<p>Semoga ini memang hanya kesalahan saya yang memang baru belajar  :)</p>
]]></content:encoded>
			<wfw:commentRss>http://canggih.web.id/3-bug-fatal-pada-microsoft-excel-2007/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ambil nilai dari file excel via VBA tanpa membukanya</title>
		<link>http://canggih.web.id/ambil-nilai-dari-file-excel-via-vba-tanpa-membukanya/</link>
		<comments>http://canggih.web.id/ambil-nilai-dari-file-excel-via-vba-tanpa-membukanya/#comments</comments>
		<pubDate>Sat, 27 Feb 2010 15:08:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[excel]]></category>
		<category><![CDATA[ExecuteExcel4Macro]]></category>
		<category><![CDATA[vba]]></category>

		<guid isPermaLink="false">http://canggih.web.id/?p=72</guid>
		<description><![CDATA[Beberapa waktu lalu, saya sempat bingung mencari bagaimana caranya mengambil nilai suatu cell dari file excel tanpa membukanya. Pertama kali yang menjadi pikiranku adalah dengan membukanya secara hidden kemudian mengambil isi cellnya baru menutup file tersebut. Tapi cara tersebut sangat tidak efektif dan waktu eksekusinya juga lambat. Akhirnya saya temukan cara ini. VBA memiliki satu [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://canggih.web.id/wp-content/uploads/2010/02/get.jpg"><img class="size-thumbnail wp-image-73 alignleft" title="get" src="http://canggih.web.id/wp-content/uploads/2010/02/get-150x150.jpg" alt="" width="150" height="150" /></a>Beberapa waktu lalu, saya sempat bingung mencari bagaimana caranya mengambil nilai suatu cell dari file excel tanpa membukanya. Pertama kali yang menjadi pikiranku adalah dengan membukanya secara <em>hidden</em> kemudian mengambil isi cellnya baru menutup file tersebut. Tapi cara tersebut sangat tidak efektif dan waktu eksekusinya juga lambat. Akhirnya saya temukan cara ini.</p>
<p><span id="more-72"></span></p>
<p>VBA memiliki satu metode yang bernama <strong>ExecuteExcel4Macro. </strong>Metode ini digunakan untuk menjalankan <strong>excel macro function</strong> dan mengembalikan nilai sesuai fungsi yang dimasukkan tersebut. Sintaxnya adalah :</p>
<blockquote><p><strong>return = ExecuteExcel4Macro(string)</strong></p>
<p><strong>string</strong> = suatu string yang berisi tentang fungsi macro yang dikehendaki, misalnya adalah <strong>MID(&#8220;&#8221;sometext&#8221;",1,4)</strong></p>
<p><strong>return</strong> = nilai yang dikembalikan oleh fungsi</p></blockquote>
<p style="text-align: left;">Dalam konteks saya, metode diatas saya terapkan dalam sebuah fungsi untuk mengambil nilai dari suatu cell. Fungsi yang saya gunakan adalah di bawah ini :</p>
<blockquote>
<p style="text-align: left;"><strong>Public Function GetValue(path, file, sheet, cell)<br />
Dim arg As String<br />
arg = &#8220;&#8216;&#8221; &amp; path &amp; &#8220;[" &amp; file &amp; "]&#8221; &amp; sheet &amp; &#8220;&#8216;!&#8221; &amp; Range(cell).Range(&#8220;A1&#8243;).Address(, , xlR1C1)<br />
GetValue = ExecuteExcel4Macro(arg)<br />
End Function</strong></p>
</blockquote>
<ul>
<li>path = lokasi direktori dari file yang akan diambil nilainya, misal(formatnya harus sama)  <strong>C:/data/vba/ </strong></li>
<li>file = nama filenya, misal <strong>belajar.xls</strong></li>
<li>sheet = lokasi sheet dari cell yang akan diambil, misal <strong>Sheet1</strong></li>
<li>cell = cell yang dikehendaki, misal <strong>C4</strong></li>
<li>arg = string yang berisi alamat dari file serta argumen2 yang digunakan</li>
</ul>
<p>Fungsi GetValue diatas akan mengembalikan string berupa nilai dari cell yang dikehendaki.</p>
<p><strong>Referensi :</strong></p>
<p><strong>http://spreadsheetpage.com</strong></p>
<p><strong>http://msdn.microsoft.com</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://canggih.web.id/ambil-nilai-dari-file-excel-via-vba-tanpa-membukanya/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Memberi titik pemisah ribuan di VBA</title>
		<link>http://canggih.web.id/memberi-titik-pemisah-ribuan-di-vba/</link>
		<comments>http://canggih.web.id/memberi-titik-pemisah-ribuan-di-vba/#comments</comments>
		<pubDate>Fri, 19 Feb 2010 11:06:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[rekursif]]></category>
		<category><![CDATA[vba]]></category>

		<guid isPermaLink="false">http://canggih.web.id/?p=45</guid>
		<description><![CDATA[Beginilah kalau develop aplikasi pakai tool dengan fitur yang sangat terbatas. Ceritanya saya akan memberi titik pemisah ribuan pada bilangan dengan panjang belum diketahui. Saya menggunakan VBA yang terdapat dalam Ms Excel. Kita tahu fitur yang dimiliki VBA sangatlah terbatas, jadi terpaksa saya menggunakan cara-cara yang konvensional. Dalam aplikasi yang saya buat, semua nilai bilangan [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;">Beginilah kalau<strong><a href="http://canggih.web.id/wp-content/uploads/2010/02/18532054.png"><img class="size-thumbnail wp-image-46 alignleft" title="18532054" src="http://canggih.web.id/wp-content/uploads/2010/02/18532054-150x150.png" alt="" width="150" height="150" /></a></strong> develop aplikasi pakai tool dengan fitur yang sangat terbatas. Ceritanya <em>saya akan memberi titik pemisah ribuan pada bilangan dengan panjang belum diketahui</em>. Saya menggunakan VBA yang terdapat dalam Ms Excel. Kita tahu fitur yang dimiliki VBA sangatlah terbatas, jadi terpaksa saya menggunakan cara-cara yang konvensional.</p>
<p style="text-align: left;"><span id="more-45"></span></p>
<p>Dalam aplikasi yang saya buat, semua nilai bilangan yang ditampilkan harus dipisah per ribuan dengan titik. Misal <strong>34.500</strong> bukan <strong>34500</strong>. Setelah dipikir-pikir sejenak, saya rasa yang paling tepat adalah menggunakan <strong>fungsi rekursi</strong> (yaitu fungsi yang memanggil dirinya sendiri, mudahnya). Fungsi rekursi yang saya buat hanya menggunakan sebuah inputan yaitu teks bilangan yang hendak ditambahkan tanda titik didalamnya.</p>
<p><em>Source codenya :</em></p>
<blockquote><p><strong>Function giveDot(ByVal strTxt As String) As String</strong></p>
<p><strong> Dim depan, belakang As String</strong></p>
<p><strong> Dim temp As String</strong></p>
<p><strong> depan = Mid(strTxt, 1, getPanjang(strTxt) &#8211; 3)</strong></p>
<p><strong> belakang = Mid(strTxt, getPanjan</strong><strong>g(strTxt) &#8211; 2, 3)</strong></p>
<p><strong> If getPanjang(depan) &lt;= 3 The</strong><strong>n</strong></p>
<p><strong> giveDot = depan &amp; &#8220;.&#8221; &amp; belakang</strong></p>
<p><strong> Else</strong></p>
<p><strong> temp = giveDot(depan)</strong></p>
<p><strong> belakang = Mid(temp, ge</strong><strong>tPanjang(temp) &#8211; 2, 3) &amp; &#8220;.&#8221; &amp; belakang</strong></p>
<p><strong> depan = Mid(temp, 1, getPanjang(temp) &#8211; 4)</strong></p>
<p><strong> giveDot = depan &amp; &#8220;.&#8221; &amp; belakang</strong></p>
<p><strong> End If</strong></p>
<p><strong>End Functio</strong><strong>n</strong></p></blockquote>
<p>Pada fungsi diatas, variabel <strong>depan</strong> digunakan untuk menyimpan nilai angka di sebelah kiri tanda titik, sedangkan <strong>belakang</strong> digunakan untuk menyimpan sebelah kanan tanda titik. Fungsi ini akan berhenti setelah diketahui bahwa panjang dari string <strong>depan &lt;=3</strong>, dengan kata lain sudah tidak membutuhkan tambahan titik pemisah lagi. Variabel temp akan menyimpan nilai rekursi dari fungsi ini untuk kemudian ditambahkan pada variabel belakang. Jadi pada setiap pemanggilan fungsi, isi dari variabel belakang akan terus bertambah panjang sedangkan isi variabel depan akan terus menjadi sedikit. Dan pada akhir eksekusi dari fungsi ini, panjang variabel depan tidak akan lebih dari 3 dan variabel belakang akan berisi kelompok bilangan-bilangan yang telah terpisah dengan titik. Misal : <strong>depan = 32 dan belakang = 423.423</strong>. Kemudian fungsi akan mengembalikan nilai dari variabel depan ditambah variabel belakang.</p>
<p>Fungsi <strong>getPanjang() </strong>diatas digunakan untuk mencari panjang dari teks yang dimasukkan sebagai parameter. Kenapa tidak saya sertakan sebagai parameter pada fungsi rekursinya? Karena hal itu akan sangat merepotkan. Input string dari fungsi rekursi berasal dari suatu cell dalam excel yang diambil lewat macro, jadi mencari panjang stringnya tidak bisa dicari secara langsung. Dibawah ini sourcecode dari fungsi getPanjang().</p>
<blockquote><p><strong>Function getPanjan</strong><strong>g(ByVal strTxt As String) As Integer</strong></p>
<p><strong> Dim temp As String</strong></p>
<p><strong> Dim i As Integer</strong></p>
<p><strong> i = 1</strong></p>
<p><strong> Do</strong></p>
<p><strong> temp = Mid(strTxt, i, 1)</strong></p>
<p><strong> i = i + 1</strong></p>
<p><strong> Loop Until temp = &#8220;&#8221;</strong></p>
<p><strong> getPanjang = i &#8211; 2</strong></p>
<p><strong>End Function</strong></p></blockquote>
<p><strong>Referensi : Pengalaman Penulis<br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://canggih.web.id/memberi-titik-pemisah-ribuan-di-vba/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

