Excel - รีเฟรชและตรวจสอบข้อมูลจาก SQL (VBA)

ฉันใช้ office 2013 และ SQLServer 2008 R2 ฉันมี Excel VBA proc ที่แทรกรายการค่าคอมมิชชันสำหรับการขายลงในฐานข้อมูล หนึ่งในคอลัมน์คือ SalesRepID ซึ่งจะต้องถูกต้องอย่างชัดเจน ตอนที่เขียน เรามีทีมขายที่ค่อนข้างคงที่ แต่ตั้งแต่นั้นมาเราได้ซื้อบริษัทอื่นอีกสองแห่งที่ทำงานเฉพาะทางน้อยกว่า ดังนั้นทีมงานขายจึงมีการเปลี่ยนแปลงเล็กน้อยในขณะนี้

วิธีการปัจจุบันมีรายการรหัสตัวแทนขายและชื่อในช่วงที่เรียงลำดับตามชื่อ ซึ่งจากนั้นจะใช้เป็นเกณฑ์การตรวจสอบ: ผู้ใช้จะได้รับรายชื่อตัวแทนฝ่ายขายในรายการแบบเลื่อนลงใน Excel และเมื่อพวกเขาเลือกรายการใดรายการหนึ่ง ระบบจะใช้ VLookup เพื่อแทรก SalesRepID ในเซลล์ที่ซ่อนอยู่ จากนั้นจะใช้ในการดำเนินการแทรก

สิ่งที่ฉันต้องการทำตอนนี้คือให้ปุ่มรีเฟรชแก่ผู้ใช้ (และเรียกใช้การรีเฟรชเมื่อเปิด) ผู้เรียกเก็บเงินบางรายทำงานที่บ้านในช่วงสุดสัปดาห์ ดังนั้น จะต้องสามารถทำงานแบบออฟไลน์ได้ (แน่นอนว่า หากมีการเพิ่มตัวแทนใหม่และพวกเขายังไม่ได้รีเฟรช พวกเขาจะไม่เห็นตัวแทนใหม่)

ฉันไม่ต้องการกำหนดอะไรเช่นแหล่งที่มา ODBC บนเครื่องจริงของผู้ใช้

ฉันกำลังพยายามหาวิธีแก้ปัญหานี้ วิธีหนึ่งคือการเพิ่มปุ่มรีเฟรชที่จะดำเนินการค้นหา แทรกรายชื่อตัวแทนฝ่ายขายปัจจุบัน และอัปเดตช่วง (หรือใช้ช่วงไดนามิก) ให้เป็นจำนวนระเบียนปัจจุบันที่ส่งคืน (ฉันสมมติว่าฉันสามารถอัปเดตที่อยู่ของช่วงที่ตั้งชื่อได้ หรือช่วงไดนามิกจะอัปเดตหากข้อมูลถูกแทรกจากการสืบค้น SQL)

ตัวอย่างเช่น:

ช่วงเริ่มต้น

1 Tom
2 Dick
3 Harry

ช่วงตัวแทนขาย = A1:B3

ผู้ใช้ Hits Refresh: ลบเนื้อหาช่วงเก่า แทรกรายการใหม่

ช่วงใหม่

1 Tom
2 Dick
3 Harry
4 Fred

ช่วงตัวแทนขาย = A1:B4

มีใครคิดวิธีที่ดีกว่านี้ได้ไหม

ความนับถือ

เครื่องหมาย


person mark1234    schedule 02.03.2015    source แหล่งที่มา
comment
คุณทำอะไรมาจนถึงตอนนี้?   -  person Maciej Los    schedule 02.03.2015


คำตอบ (1)


ลองใช้วิธีนี้กับช่วงไดนามิกของคุณ

Dim LastRow as integer
    LastRow = Sheets("yoursheet").Cells(Rows.Count, "A").End(xlUp).Row

    Range("A1:B" & LastRow).name = "SalesReps"

รหัสทำงานในลักษณะที่ไม่ได้ตั้งใจเล็กน้อย Cells(Rows.Count, "A") ค้นหาเซลล์สุดท้ายบนแผ่นงานในคอลัมน์ A (แถว 1048576 หรืออย่างอื่น)

End(xlUp).Row เทียบเท่ากับการกด ctrl+up จากเซลล์นั้นและส่งกลับหมายเลขแถวของเซลล์แรกที่มีข้อมูล

person JS1991    schedule 02.03.2015
comment
ขอบคุณมาก. ทำงานได้ดี แต่ไม่แน่ใจว่าฉันเข้าใจว่าทำไม ช่วงเริ่มต้นของฉันคือ I6:J6 เห็นได้ชัดว่าฉันเปลี่ยนการอ้างอิงในตัวอย่างของคุณเพื่อให้ตรงกับช่วงของฉัน แต่ไม่แน่ใจเกี่ยวกับ xlUp ฉันคิดว่าเริ่มจากแถวแรกและการใช้ xlDown น่าจะเป็นวิธีแก้ปัญหา ตัวอย่างของคุณเริ่มต้นจากจุดสิ้นสุดของทั้งแผ่นและมองขึ้นไปจากจุดนั้นหรือไม่ แค่พยายามทำความเข้าใจ.. ขอบคุณมาร์ค - person mark1234; 02.03.2015