ผมเจอบ่อยครับ เพราะผมพิมพ์สัมผัสไม่เป็น ประมาณว่า พิมพ์ไปยาวยืด แต่พอเงยหน้าจาก keyboard มาดูหน้าจอ ดันเป็นภาษาที่ไม่ต้องการพิมพ์ เช่นอยากพิมพ์คำว่า สวัสดี แต่ลืมเป็น keyboard เป็นภาษาไทย ก็กลายเป็น l;ylfu
ต้องใช้โปรแกรมนี้เลยครับ แล้วคุณจะลืมปุ่มเปลี่ยนภาษาไปเลย
>>Download<<
ต้องขอบคุณผู้พัฒนาด้วยครับ
โพสต์แนะนำ
วันศุกร์ที่ 21 ธันวาคม พ.ศ. 2555
วันอังคารที่ 18 ธันวาคม พ.ศ. 2555
วันจันทร์ที่ 17 ธันวาคม พ.ศ. 2555
อวสาน MSN/WLM
18 เดือน หลังจากไมโครซอฟท์ประกาศว่า ต้องจ่ายเงินเดือนให้กับผู้พัฒนา
Windows Live Messenger (WLM) หรือชื่อก่อนหน้านี้คือ MSN เป็นเงินสูงถึง
$8.5 พันล้าน หรือประมาณ 2 แสน 6 หมื่นล้านบาทเลยทีเดียว
ไมโครซอฟท์ได้ให้ข่าวว่าจะปิด
MSN ในเดือนมีนาคม 2013 (พ.ศ. 2556) ยกเว้นประเทศจีนที่ยังจะเปิดต่อ
ซึ่งสะท้อนให้เห็นถึงการให้ความสำคัญกับ messenger ตัวใหม่ที่เพิ่งซื้อมานั่นก็คือ
Skype
WLM เปิดตัวเมื่อปี
1999 ในชื่อ MSN Messenger และได้เพิ่มความสามารถในด้านต่างๆมาตลอด
ไม่ว่าจะเป็น การแชร์รูปภาพ การโทรแบ video แม้กระทั่งการเล่นเกมออนไลน์
โดยในปี 2009 ก็มียอดผู้ใช้ถึง 330 ล้านคนทั่วโลก
จากการวิจัยพบว่า
มีผู้ใช้ WLM มากเป็นสองเท่าของผู้ใช้ Skype เป็นรองก็แค่ Yahoo Messenger แต่การวิจัยก็พบว่า
ยอดผู้ใช้ตกลงถึงปีละ 8.3 ล้านคน นั่นคือ 48% ต่อปี
ในขณะที่ยอดผู้ใช้ Skype กลับเพิ่มขึ้นเรื่อยๆ ในช่วงเดียวกัน
แต่ยังดีที่ Skype
มี
option ให้สามารถใช้ user เดียวกับที่ใช้ใน WLM ได้
ที่มา: BBC News
ที่มา: BBC News
วันพฤหัสบดีที่ 22 พฤศจิกายน พ.ศ. 2555
ทำให้ VS2008 build Smart Device Project ให้เร็วขึ้น
1) เปิดไฟล์ C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.CompactFramework.Common.targets for editing.
2) เปลี่ยนตรงนี้:
<Target
Name="PlatformVerificationTask">
<PlatformVerificationTask
PlatformFamilyName="$(PlatformFamilyName)"
PlatformID="$(PlatformID)"
SourceAssembly="@(IntermediateAssembly)"
ReferencePath="@(ReferencePath)"
TreatWarningsAsErrors="$(TreatWarningsAsErrors)"
PlatformVersion="$(TargetFrameworkVersion)"/>
</Target>
ให้เป็นแบบนี้:
<Target
Name="PlatformVerificationTask">
<PlatformVerificationTask
Condition="'$(DoPlatformVerificationTask)'=='true'"
PlatformFamilyName="$(PlatformFamilyName)"
PlatformID="$(PlatformID)"
SourceAssembly="@(IntermediateAssembly)"
ReferencePath="@(ReferencePath)"
TreatWarningsAsErrors="$(TreatWarningsAsErrors)"
PlatformVersion="$(TargetFrameworkVersion)"/>
</Target>
2) เปลี่ยนตรงนี้:
<Target
Name="PlatformVerificationTask">
<PlatformVerificationTask
PlatformFamilyName="$(PlatformFamilyName)"
PlatformID="$(PlatformID)"
SourceAssembly="@(IntermediateAssembly)"
ReferencePath="@(ReferencePath)"
TreatWarningsAsErrors="$(TreatWarningsAsErrors)"
PlatformVersion="$(TargetFrameworkVersion)"/>
</Target>
ให้เป็นแบบนี้:
<Target
Name="PlatformVerificationTask">
<PlatformVerificationTask
Condition="'$(DoPlatformVerificationTask)'=='true'"
PlatformFamilyName="$(PlatformFamilyName)"
PlatformID="$(PlatformID)"
SourceAssembly="@(IntermediateAssembly)"
ReferencePath="@(ReferencePath)"
TreatWarningsAsErrors="$(TreatWarningsAsErrors)"
PlatformVersion="$(TargetFrameworkVersion)"/>
</Target>
วันพฤหัสบดีที่ 8 พฤศจิกายน พ.ศ. 2555
การ SELECT ข้อมูลแบบ Random ของ Database ต่างๆ
Select
a random row with MySQL:
SELECT
column FROM table
ORDER
BY RAND()
LIMIT
1
Select
a random row with PostgreSQL:
SELECT
column FROM table
ORDER
BY RANDOM()
LIMIT
1
Select
a random row with Microsoft SQL Server:
SELECT
TOP 1 column FROM table
ORDER
BY NEWID()
Select
a random row with IBM DB2:
SELECT
column, RAND() as IDX
FROM
table
ORDER
BY IDX FETCH FIRST 1 ROWS ONLY
Select
a random record with Oracle:
SELECT
column FROM
(
SELECT column FROM table
ORDER
BY dbms_random.value )
Waterfox 64bit โคตรเร็ว
วันนี้ ได้ลอง browser ใหม่ในสายของ firefox ที่แยกออกมาเพื่อเครื่องที่เป็น windows 64bit โดยเฉพาะ
โดยใช้ขื่อ Waterfox เป็นรุ่นที่ทำการจัดการ ram, cpu, graphic card ได้ดีมาก ขอบอกว่าประทับใจในความเร็วอย่างมาก จากที่เคยติดใจในความเร็วของ chrome ตอนนี้ต้องมาแบ่งใจให้ Waterfox อย่างเลี่ยงไม่ได้
ใครใช้เครื่อง 64 bit ลองดู: http://download.cnet.com/Waterfox-64-Bit/3000-2356_4-75575521.html?tag=rb_content;main
โดยใช้ขื่อ Waterfox เป็นรุ่นที่ทำการจัดการ ram, cpu, graphic card ได้ดีมาก ขอบอกว่าประทับใจในความเร็วอย่างมาก จากที่เคยติดใจในความเร็วของ chrome ตอนนี้ต้องมาแบ่งใจให้ Waterfox อย่างเลี่ยงไม่ได้
ใครใช้เครื่อง 64 bit ลองดู: http://download.cnet.com/Waterfox-64-Bit/3000-2356_4-75575521.html?tag=rb_content;main
วันพุธที่ 7 พฤศจิกายน พ.ศ. 2555
กลับกัน function หาวันที่ จากวันในหนึ่งปี
เช่น วันที่ 130 ของปี 2012 คือวันอะไร เป็นต้น
function DateFromDaysOfYear(dayOfYear, year){
var d = new Date(year,0,1);
d.setDate(d.getDate()+dayOfYear-1);
return d;
}
function DateFromDaysOfYear(dayOfYear, year){
var d = new Date(year,0,1);
d.setDate(d.getDate()+dayOfYear-1);
return d;
}
วันจันทร์ที่ 5 พฤศจิกายน พ.ศ. 2555
ฟังก์ชั่นหา Day of Year
function dayofyear(d) { // d is a Date object
var yn = d.getFullYear();
var mn = d.getMonth();
var dn = d.getDate();
var d1 = new Date(yn,0,1,12,0,0); // noon on Jan. 1
var d2 = new Date(yn,mn,dn,12,0,0); // noon on input date
var ddiff = Math.round((d2-d1)/864e5);
return ddiff+1;
}
ที่มา: http://www.webdeveloper.com/forum/showthread.php?125428-Does-javascript-have-a-simple-get-day-of-the-year-type-function&p=657625
วันจันทร์ที่ 15 ตุลาคม พ.ศ. 2555
ทำไมต้อง Eject flash drive ก่อนถอดออกจากเครื่องคอมพิวเตอร์
Flash drive, pen drive หรือ thumb drive แล้วแต่จะเรียก แต่ทั้งหมดนั่นก็คือสื่อบันทึกข้อมูลที่ต่อเข้ากับเครื่องคอมพิวเตอร์ ผ่านทางพอร์ต USB ส่วนใหญ่แล้วจะมีขนาดเล็ก พกพาง่าย (บางอันก็เล็กเกินไป หายง่ายด้วย) หลายๆ คนอาจจะสงสัยว่า ทำไมก่อนที่จะถอดออกจากเครื่องคอมฯ จะต้องทำการ “Eject” หรือ Safety Remove เสียก่อน และทำไมถ้าไม่ทำอย่างนั้น ข้อมูลจะเสียหาย?
โดยทั่วไป OS ต่างๆ (Windows, OS X, Linux …) จะใช้วิธีการที่เรียกว่า “Write Caching” ในการเขียนไฟล์ไปยัง Drive ต่างๆ Write Caching ก็คือการ “สะสม หรือ Cache” คำสั่งร้องขอในการเขียนไฟล์ไปยัง drive ต่างๆ ไว้จำนวนหนึ่งก่อน (คือ สั่งให้ copy file ก็อาจจะยังไม่ทำทันที) แล้วทำทีเดียวพร้อมกัน เพื่อเพิ่มประสิทธิภาพในการเชื่อมต่อ และเขียนไฟล์ไปยัง drive นั้นๆ
ทีนี้ ถ้าอยู่ดีๆ เราดึง flash drive ออก เพราะนึกว่า copy file ลงไปเรียบร้อยแล้ว โดยที่ไม่ทำการ Eject เสียก่อน ก็จะทำให้ข้อมูลที่ค้าง หรือยังไม่ได้เขียนลงไปจริงๆ หรือเขียนยังไม่เสร็จนั้น เสียหายได้ เนื่องจากการ Eject นั้น เป็นการบอก OS ว่า “มีอะไรที่ทำค้างอยู่ ก็ทำให้เสร็จซะ ฉันจะเอาออกแล้ว”
ยังโชคดีหน่อยสำหรับคนที่ใช้ Microsoft Windows เพราะว่า โดยปกติแล้วถ้า windows มองว่า drive ไหนเป็น drive ภายนอก หรือ Removable Drive แล้ว มันจะปิดฟังก์ชั่น Write Caching สำหรับ drive นั้นให้เอง ทำให้สามารถถอด flash drive ได้โดยที่ไม่ต้องเสี่ยงกับข้อมูลเสียหาย ส่วน OS X และ Linux นั้น เปิดใช้งาน Write Caching สำหรับทุกๆ drive
อย่างไรก็ตาม แม้ windows จะไม่ใช้ write caching กับ removable drive เราก็ยังควรที่จะ Eject ก่อนจะถอดทุกครั้ง เพราะบางทีหากเกิดเพี้ยนขึ้นมา มองว่า flash drive เรา ไม่ใช่ removable drive ขึ้นมา (เกิดได้จากหลายสาเหตุ) มันก็จะเปิดใช้งาน write caching ทันทีที่มีการเขียนไฟล์ลง drive นั้น สรุป Eject ดีที่สุด แต่ถ้าเผลอดึงออกมา ก็อุ่นใจได้ระดับหนึ่ง หาก windows ไม่เพี้ยนซะก่อน
วันจันทร์ที่ 24 กันยายน พ.ศ. 2555
8 password ที่ชอบใช้กันมากที่สุด
ข้อมูลเกือบทั้งหมดได้มาจาก avast.com ส่วนข้อแรกจากประสปการณ์ เพราะไปที่ไหนก็เห็นใช้กัน
1. P@ssw0rd
2. welcome
3. password
4. Welcome1
5. welcome1
6. Password2
7. 123456
8. Password01
1. P@ssw0rd
2. welcome
3. password
4. Welcome1
5. welcome1
6. Password2
7. 123456
8. Password01
วันพฤหัสบดีที่ 20 กันยายน พ.ศ. 2555
ขนาดกระดาษ A3, A4 และอื่นๆ
ต้องใช้ตอนเขียน Reporting Service (SSRS)
Metric Name
A5 A4 A3 A3+ A2 A1 A0 |
Metric Size
148 x 210 mm 210 x 297 mm 297 x 420 mm 329 x 483 mm 420 x 594 mm 594 x 841 mm 841 x 1189 mm |
U.S. Equivalent
5.8 x 8.3 inches 8.3 x 11.7 inches 11.7 x 16.5 inches 13 x 19 inches 16.5 x 23.4 inches 23.4 x 33.1 inches 33.1 x 46.8 inches |
วันพุธที่ 19 กันยายน พ.ศ. 2555
Excel VBA บังคับให้ตัวเลข เก็บเป็นตัวอักษร
เขียน VBA ไปก็งงไป อ่านรหัสสินค้ามา เป็น 0001 แต่พอเอาลง excel มันกลับมองเป็นเลข 1 อย่างเดียว และก็ไม่อยากใส่เครื่องหมาย ' ข้างหน้า เพื่อให้ excel มองว่าเป็น text กว่าจะหาวิธีแก้ได้
ตามนี้เลย:
Sheets("mySheet").Range("A1").NumberFormat="@"
บังคับให้ cell A1 แสดงข้อมูลเป็น text ไม่ใช่ตัวเลข
ตามนี้เลย:
Sheets("mySheet").Range("A1").NumberFormat="@"
บังคับให้ cell A1 แสดงข้อมูลเป็น text ไม่ใช่ตัวเลข
วันพฤหัสบดีที่ 23 สิงหาคม พ.ศ. 2555
Windows 8 เอา Start Menu กลับมา
เบื่อ Windows 8 หาโปรแกรมยาก Start Menu หาย เอากลับมาเลย M$ จะเน้น tablet ไปไหน ทำงานจริงเค้าใช้ PC ไม่ก็ laptop เฟ้ย เอ้า ไม่ใช่ก็ไกล้เคียง โดยใช้ Freeware ตัวนี้ จะได้ start menu ที่เหมือน windows 7 กลับมา ViStart
วันศุกร์ที่ 10 สิงหาคม พ.ศ. 2555
Hacker อิหร่าน ถล่มเว็บอิสราเอล
แฮ็กเกอร์รายหนึ่งที่ใช้ชื่อแทนตัวเองว่า You-r!-k@n อ้างว่าได้ทำการแฮ็ก และเปลี่ยนแปลงหน้าเว็บไซต์ต่างๆ
จำนวน 91 เว็บ ซึ่งเป็นเว็บของหน่วยงานรัฐ หน่วยงานการศึกษา และบริษัทเอกชนของอิหร่าน
โดยทำไปเพื่อประท้วงรัฐบาลอิหร่านในข้อหา “สนับสนุนผู้ก่อการร้าย และสร้างอาวุธนิวเคลียร์เพื่อทำลายอิสราเอล”
You-r!-k@n กล่าวว่า
เขาเริ่มด้วยการแทนที่หน้าเว็บไซต์เหล่านั้นด้วยรูปธงชาติอิสราเอล พร้อมกับข้อความ
“This site is hacked by You-r!-k@n. Say no to
terror. Say no to nuclear Iran.” แปลว่า “อิหร่านจงอย่ายุงกับผู้ก่อการร้าย
อย่ายุ่งกับนิวเคลียร์” จากนั้นก็ทำการลบเว็บทั้งหมดทิ้ง จากข้อมูลจากอีเมล์ที่เขาได้ส่งให้ InfoWorld
และ
InfoSec Island กล่าวว่า “เว็บไซต์ทั้งหมดได้ถูกลบไปแล้ววันนี้ (del *.*:-) ฉันมี console
backdoor ติดตั้งไว้บน server ด้วย DNS และ web server ไม่มีอีกต่อไปแล้ว”
แต่ทว่า เขาก็ไม่ได้ให้รายชื่อเว็บทั้งหมดที่เขาแฮ็ก
แต่ชื่อเว็บทั้งหมดที่เข้าเอ่ยถึง ไม่สามารเข้าไปดูได้ในขณะเขียนเรื่องนี้
นอกจากนี้ยังมีข้อความโต้ตอบทางอีเมล์กับ InfoWorld
ดังนี้
InforWorld: คุณใช้เวลานานเท่าไหร่ในการจัดการกับเว็บทั้ง
91 แห่ง ตั้งแต่เริ่มวางแผน จนสำเร็จทั้งหมด
You-r!-k@n: ประมาณ 3
วัน
InfoWorld: คิดว่าง่าย
หรือยากกว่าที่คิดในการแฮ็กเว็บทั้งหมดนั้น?
You-r!-k@n: ไม่ได้ยากที่สุดตั้งแต่ที่เคยทำมา
อันที่ยากที่สุดสำหรับผมคือที่ irimo.ir (หน่วยงานอุตุนิยมของอิหร่านที่เจาะในเดือน พ.ค.)
ซึ่งใช้เวลาถึง
2 เดือน ผมวางแผนที่จะยกระดับสิทธิ์จากผู้เข้าชมเว็บทั่วไป ให้กลายเป็นผู้จัดการระบบโดเมนทั้งโดเมน
มันเป็นโดเมนใหญ่ ครอบคลุมเว็บสัก 2-3 เว็บได้ จากนั้นก็ลบ AD ทั้งหมดทิ้ง
ทำให้พวกเขาใช้เวลาเป็นอาทิตย์ กว่าจะกู้กลับมาได้ แต่รับรองว่ากู้ได้ไม่หมดหรอก
InfoWorld: เว็บเหล่านี้มีจุดอ่อนเรื่องความปลอดภัยใช่มั้ย?
คุณแปลกใจกับจุดอ่อนต่างๆ ที่คุณเจอหรือเปล่า?
You-r!-k@n: อืม… คือผมก็ไม่ใช่มือใหม่
ผมเลยไม่แปลกใจเท่าไหร่ มันเป็นการโจมตีแบบเป็นขั้นเป็นตอน เริ่มจาก SQL
Injection เข้าไปในหน้าของผู้ดูแลเว็บ เพื่อหาจุดอ่อน เพื่อให้ผมอัพโหลดไฟล์ ASP
เข้าไปได้ จากนั้นก็เข้า command promt และยกระดับสิทธิ์ของตัวเอง จากนั้นก็ port
fun J และแล้วก็ได้เป็น Admin
InfoWorld: คุณยกตัวอย่างสักเรื่องสองเรื่องให้ฟังได้มั้ยว่าคุณได้ใช้
social engineering ยังไงบ้าง?
You-r!-k@n: อืม..
มีบริษัทของอิหร่านแห่งหนึ่ง ที่ผมได้แฮ็กอีเมล์อันนึง จากนั้น
ส่งอีเมล์หาเพื่อนร่วมงานของคนๆ นั้น โดยใช้ข้อความว่า “เจ๋ง
ลองดูนี่สิ http://xxx.xxx.xxx.xx” มันเป็น URL หลอก เพื่อจะทำการติดตั้ง
malware บน mail server แค่คลิกลิงค์ พวกเขาก็เสร็จ
InfoWorld: เห็นคุณบอกในข้อความแรกของคุณว่า
เจ้าของเว็บไซต์จะต้องสร้างเว็บขึ้นมาใหม่หมดตั้งแต่ต้น
คุณแน่ใจเหรอว่าพวกเข้าจะไม่มีไฟล์สำรอง?
You-r!-k@n: ผมไม่แน่ใจหรอกว่าพวกเขามีไฟล์สำรองหรือเปล่า
แต่ถึงจะมี ก็ไม่รู้ว่าจะอัพเดทล่าสุดหรือเปล่า
ปัญหาใหญ่ที่สุดของพวกเขาคือหาจุดอ่อนให้เจอ เพาระถ้าไม่ปิดจุดอ่อนนั้น
ถึงจะเอาไฟล์สำรองมาแทน ผมก็เข้าไปอีกได้อยู่ดี
InfoWorld: ถ้าคุณทำความเสียหายให้เว็บตั้ง
91 เว็บได้ คุณคิดว่าจะมีคนที่มีฝีมือพอกันมาทำแบบนี้กับอิสราเอล สหรัฐฯ หรือว่าประเทศอื่นมั้ย?
You-r!-k@n: สิ่งที่ผมมั่นใจคือ
ในอิสราเอลเอง และทุกๆ ประเทศทั่วโลก ก็มี server ที่มีจุดอ่อนอยู่ทั้งนั้นแหละ
แปลจาก InfoWorld.com
วันศุกร์ที่ 13 กรกฎาคม พ.ศ. 2555
.NET WinForm แก้ฟอร์ม กระพริบ ถ้ามี control เยอะๆ
ในกรณีที่ form มี control เยอะๆ (หรือ form ทีรูปเป็น background หรือมี TabControl ใน form) การเปิด form หรือ สลับ form ไปมา อาจจะทำให้เกิดการกระพริบของ control ต่างๆ ได้ ถึงแม้จะให้ Double Buffer เป็น true แล้วก็ตาม นี่คือโค้ด การ override property ของ form ที่ชื่อว่า CreateParams
ปกติแล้วเวลา form (หรือ control อื่นๆ) ทำการ update ตัวเอง (Paint) มันจะวาดทับพื้นที่ทั้งหมดของตัวเอง แล้ว วาด control ที่อยู่ในตัวมันใหม่อีกที ทำให้หากมี control เยอะๆ จะเกิดการกระพริบในการวาด
ตัวเลข style ที่เป็นเลข &H2000000 ก็คือ style ที่ชื่อว่า WS_CLIPCONTROLS เป็นการบอกว่า ให้วาดเฉพาะส่วนที่ไม่มี control อื่นๆ อยู่เท่านั้น จึงทำให้การวาด (paint) เร็วขึ้น
Protected Overrides ReadOnly Property CreateParams() As _
System.Windows.Forms.CreateParams
Get
Dim cp As CreateParams = MyBase.CreateParams
Dim OSVer As Version = _
System.Environment.OSVersion.Version()
Select Case OSVer.Major
Case 5
If OSVer.Minor > 0 Then
cp.ExStyle = cp.ExStyle Or &H2000000
End If
Case Is > 5
cp.ExStyle = cp.ExStyle Or &H2000000
End Select
Return cp
End Get
End Property
สาเหตุที่ต้องตรวจสอบ version ของ windows เนื่องจากใน Windows ที่ต่ำกว่า XP จะทำให้ form แบบ MDI กิน cpu มาก จนทำให้โปรแกรมแฮงก์ได้
ปกติแล้วเวลา form (หรือ control อื่นๆ) ทำการ update ตัวเอง (Paint) มันจะวาดทับพื้นที่ทั้งหมดของตัวเอง แล้ว วาด control ที่อยู่ในตัวมันใหม่อีกที ทำให้หากมี control เยอะๆ จะเกิดการกระพริบในการวาด
ตัวเลข style ที่เป็นเลข &H2000000 ก็คือ style ที่ชื่อว่า WS_CLIPCONTROLS เป็นการบอกว่า ให้วาดเฉพาะส่วนที่ไม่มี control อื่นๆ อยู่เท่านั้น จึงทำให้การวาด (paint) เร็วขึ้น
Protected Overrides ReadOnly Property CreateParams() As _
System.Windows.Forms.CreateParams
Get
Dim cp As CreateParams = MyBase.CreateParams
Dim OSVer As Version = _
System.Environment.OSVersion.Version()
Select Case OSVer.Major
Case 5
If OSVer.Minor > 0 Then
cp.ExStyle = cp.ExStyle Or &H2000000
End If
Case Is > 5
cp.ExStyle = cp.ExStyle Or &H2000000
End Select
Return cp
End Get
End Property
สาเหตุที่ต้องตรวจสอบ version ของ windows เนื่องจากใน Windows ที่ต่ำกว่า XP จะทำให้ form แบบ MDI กิน cpu มาก จนทำให้โปรแกรมแฮงก์ได้
วันอังคารที่ 10 กรกฎาคม พ.ศ. 2555
Bye bye Thunder Bird
Mozilla plans to let go of its open-source e-mail software, with hopes that other people will keep Thunderbird alive, TechCrunch says.
Read more: download.cnet.com
Read more: download.cnet.com
วันศุกร์ที่ 1 มิถุนายน พ.ศ. 2555
ฟังก์ชั่น Excel VBA SaveAs dialog และเขียน TextFile
Sub WriteFile(fname As String, txt As String) 'เขียน Text File
Dim fso As New FileSystemObject
Dim stream As TextStream
Set stream = fso.CreateTextFile(fname, True)
stream.Write (txt)
stream.Close
End Sub
Function SaveDialog() As String 'เปิด Dialog ถามชื่อ File
Dim ret As String
ret = Application.GetSaveAsFilename("Output.xml", _
"XML files (*.xml),*.xml", 1, "Save XML Output")
If ret <> "False" Then
SaveDialog = ret
End If
End Function
ถ้าจะใช้ FileSystemObject ต้อง reference Microsoft Scripting Runtime ด้วย โดยในหน้า VB ไปที่ Tool -> References...
MS Excel: Format Function
MS Excel: Format Function with Strings (VBA only)
In Excel, the Format function takes an expression and returns it as a formatted string.
The syntax for the Format function is:
Format ( expression, [ format ] )
expression is the value to format.
format is optional. It is the format to apply to the expression. You can either define your own format or use one of the named formats that Excel has predefined such as:
Format Explanation General Number Displays a number without thousand separators. Currency Displays thousand separators as well as two decimal places. Fixed Displays at least one digit to the left of the decimal place and two digits to the right of the decimal place. Standard Displays the thousand separators, at least one digit to the left of the decimal place, and two digits to the right of the decimal place. Percent Displays a percent value - that is, a number multiplied by 100 with a percent sign. Displays two digits to the right of the decimal place. Scientific Scientific notation. Yes/No Displays No if the number is 0. Displays Yes if the number is not 0. True/False Displays True if the number is 0. Displays False if the number is not 0. On/Off Displays Off if the number is 0. Displays On is the number is not 0. General Date Displays date based on your system settings Long Date Displays date based on your system's long date setting Medium Date Displays date based on your system's medium date setting Short Date Displays date based on your system's short date setting Long Time Displays time based on your system's long time setting Medium Time Displays time based on your system's medium time setting Short Time Displays time based on your system's short time setting
Applies To:
- Excel 2007, Excel 2003, Excel XP, Excel 2000
For Example:
Format("210.6", "#,##0.00") would return '210.60' Format("210.6", "Standard") would return '210.60' Format("0.981", "Percent") would return '98.10%' Format("1267.5", "Currency") would return '$1,267.50' Format("Sep 3, 2003", "Short Date") would return '9/3/2003'
VBA Code:
The Format function can only be used in VBA code. For example:
Dim LValue As String
LValue = Format("0.981", "Percent")
In this example, the variable called LValue would now contain the value of '98.10%'.
CREDIT: http://www.techonthenet.com
วันศุกร์ที่ 25 พฤษภาคม พ.ศ. 2555
พิมพ์เครื่องหมาย ~ ใน Windows
เครื่องหมาย ~ มีชื่อว่า Tilde (ออกเสียงว่า ทีล-เด, ทีล-ดา, ทีล-เดอ แล้วแต่จะอ่านแบบไหน แบบเสปน หรือแบบ เนเธอร์แลนด์ หรือแบบ ...) เป็นปุ่มบนคีย์บอร์ดที่ใช้เปลี่ยนภาษา สำหรับคนไทยที่ใช้คอมพิวเตอร์หลายๆ คน ใช้กันจนชิน จนถือเป็นปุ่มที่มีประโยชน์อย่างเดียวคือเปลี่ยนภาษา
แต่เมื่อถึงคราวต้องการพิมพ์ตัว Tilde นี้ออกมาจริงๆ บนหน้าจอคอมฯ แล้ว ก็ต้องกด Shift แล้วกดปุ่ม ~ ตาม ถ้าใน Windows XP ก็ไม่มีปัญหาอะไร แต่พอเจอ Windows 7 แล้ว งงงง!! กดยังไงก็กลายเป็นเปลี่ยนภาษาอยู่ดี สำหรับคนที่ตั้งปุ่ม Ctrl+Shift หรือ Alt+Shift เป็นปุ่มเปลี่ยนภาษาคงไม่เจอเรื่องนี้ แต่ถ้าคนที่ชอบตั้งปุ่ม Tilde นี้เป็นปุ่มเปลี่ยนภาษาแล้วละก็ ...
ถ้าจะพิมพ์เครื่องหมาย Tilde ใน MS Word หรือ Notepad หรือโปรแกรมอื่นใน Windows 7 (ไม่รู้ Vista, Win8 เป็นหรือเปล่า)
ให้กด Shift+ปุ่ม Tilde ค้างไว้ชั่วอึดใจนึง (ประมาณ 1 วินาทีมั้ง) เจ้าตัวอักษร ~ ก็จะโผล่มาครับ แต่ต้องกดในขณะที่เป็นภาษาอังกฤษอยู่นะ ถ้ากดตอนที่คีย์บอร์ดเป็นภาษาไทยอยู่ จะออกมาเป็นเครื่องหมายเปอร์เซนต์ %
แต่เมื่อถึงคราวต้องการพิมพ์ตัว Tilde นี้ออกมาจริงๆ บนหน้าจอคอมฯ แล้ว ก็ต้องกด Shift แล้วกดปุ่ม ~ ตาม ถ้าใน Windows XP ก็ไม่มีปัญหาอะไร แต่พอเจอ Windows 7 แล้ว งงงง!! กดยังไงก็กลายเป็นเปลี่ยนภาษาอยู่ดี สำหรับคนที่ตั้งปุ่ม Ctrl+Shift หรือ Alt+Shift เป็นปุ่มเปลี่ยนภาษาคงไม่เจอเรื่องนี้ แต่ถ้าคนที่ชอบตั้งปุ่ม Tilde นี้เป็นปุ่มเปลี่ยนภาษาแล้วละก็ ...
ถ้าจะพิมพ์เครื่องหมาย Tilde ใน MS Word หรือ Notepad หรือโปรแกรมอื่นใน Windows 7 (ไม่รู้ Vista, Win8 เป็นหรือเปล่า)
ให้กด Shift+ปุ่ม Tilde ค้างไว้ชั่วอึดใจนึง (ประมาณ 1 วินาทีมั้ง) เจ้าตัวอักษร ~ ก็จะโผล่มาครับ แต่ต้องกดในขณะที่เป็นภาษาอังกฤษอยู่นะ ถ้ากดตอนที่คีย์บอร์ดเป็นภาษาไทยอยู่ จะออกมาเป็นเครื่องหมายเปอร์เซนต์ %
วันศุกร์ที่ 11 พฤษภาคม พ.ศ. 2555
.NET Save Excel Error: Old Format or Invalid Type Library
ถ้าใช้ VB หรือ C# .NET สร้าง Excel File แล้วเกิด Error ประมาณนี้
Error: 0x80028018 (-2147647512)
Description: Old Format or Invalid Type Library
อาจจะเกิดปัญหาจาก Locale ของเครื่องไม่ตรงกับ ภาษาในเวอร์ชั่นของ excel เช่น ใช้ Excel เวอร์ชั่นภาษาอังกฤษ แต่ Locale ของเครื่องเป็นภาษาไทย เป็นต้น
การแก้ไขคือ ให้ปรับ Locale ในโค้ดเป็น En-US ก่อน แล้วถึงตามด้วยโค้ดที่ทำงานกับไฟล์ Excel พอทำงานกับ Excel เสร็จ ก็ restore locale กลับ เช่น
'backup ค่า Locale เดิม
Dim oldCI As System.Globalization.CultureInfo = _
System.Threading.Thread.CurrentThread.CurrentCulture
'ตั้งค่า Locale ใหม่
System.Threading.Thread.CurrentThread.CurrentCulture = _
New System.Globalization.CultureInfo("en-US")
'code ที่ทำงานกับ file Excel
'...
'restore ค่าเดิมกลับ
System.Threading.Thread.CurrentThread.CurrentCulture=oldCI
Error: 0x80028018 (-2147647512)
Description: Old Format or Invalid Type Library
อาจจะเกิดปัญหาจาก Locale ของเครื่องไม่ตรงกับ ภาษาในเวอร์ชั่นของ excel เช่น ใช้ Excel เวอร์ชั่นภาษาอังกฤษ แต่ Locale ของเครื่องเป็นภาษาไทย เป็นต้น
การแก้ไขคือ ให้ปรับ Locale ในโค้ดเป็น En-US ก่อน แล้วถึงตามด้วยโค้ดที่ทำงานกับไฟล์ Excel พอทำงานกับ Excel เสร็จ ก็ restore locale กลับ เช่น
'backup ค่า Locale เดิม
Dim oldCI As System.Globalization.CultureInfo = _
System.Threading.Thread.CurrentThread.CurrentCulture
'ตั้งค่า Locale ใหม่
System.Threading.Thread.CurrentThread.CurrentCulture = _
New System.Globalization.CultureInfo("en-US")
'code ที่ทำงานกับ file Excel
'...
'restore ค่าเดิมกลับ
System.Threading.Thread.CurrentThread.CurrentCulture=oldCI
สมัครสมาชิก:
ความคิดเห็น (Atom)